package com.zyh.market.task;

import com.zyh.market.Att;
import com.zyh.market.entity.ProductOrder;
import com.zyh.market.service.ProductOrderService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Calendar;
import java.util.Date;
import java.util.List;
@Slf4j
@Component
@EnableScheduling
public class MallProductTask {
  @Autowired
  private ProductOrderService mallProductOrderService;

  /**
   * 定时任务，用于处理商城产品订单超时的情况
   * 该任务查询在指定时间内未支付的订单，并对其进行关闭处理
   */
  @Scheduled(cron = "0 */30 * * * ?") // 调整为每 30 分钟执行一次
  public void taskMallProductOrderTimeOut() {
    try {
      // 获取当前时间，并计算出 10 分钟前的时间
      Calendar cal = Calendar.getInstance();
      cal.setTime(new Date());
      cal.add(Calendar.MINUTE, -10);
      Date time = cal.getTime();

      // 查询所有未支付且创建时间在 10 分钟之前的订单
      List<ProductOrder> objs = mallProductOrderService.query()
              .eq(Att.ProductOrder.dealStatus, 2)
              .le(Att.ProductOrder.createTime, time)
              .list();

      // 遍历订单列表，对每个订单执行超时处理
      for (ProductOrder obj : objs) {
        try {
          mallProductOrderService.taskMallProductOrderTimeOut(obj);
        } catch (Exception e) {
          // 记录处理订单超时失败的日志
          log.error("处理订单超时失败: {}", obj, e);
        }
      }
    } catch (Exception e) {
      // 记录定时任务执行失败的日志
      log.error("定时任务处理订单超时失败", e);
    }
  }
}

